
class RulesClass {
  constructor() {
  }
  rules:{
    [key: string]: RegExp
  } = {
    // 手机号
    phone: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/,
    // 中文
    chineseName: /^(?:[\u4e00-\u9fa5·]{2,16})$/,
    // 邮箱
    email: /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/,
    // 网址路径
    url: /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/,
    // base64字符
    base64: /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$/i,
    // 身份证号
    idNumber: /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
    // 英文
    englishName: /(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/,
    // 数字
    number: /^\d{1,}$/,
    // 微信号
    wxCard: /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/,
    // 大写英文
    UppercaseEnglish: /^[A-Z]+$/,
    // 小写英文
    UnderwriteEnglish: /^[a-z]+$/,
    // 密码6为含数字、小写字母、特殊字符
    password: /^\S*(?=\S{6,})(?=\S*\d)(?=\S*[a-z])(?=\S*[!@#$%^&*?/.])\S*$/,
    // 校验format格式
    formatType: /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g
  }

  getDefaultRules (key: keyof typeof this.rules) :RegExp {
    return this.rules[key]
  }

  getRules (key: string) :RegExp {
    return this.rules[key]
  }

  setRules (key: string, value: RegExp) {
    this.rules[key] = value
  }

  getAllRules ()  {
    return this.rules
  }
}

const rulesType:RulesClass = new RulesClass()
export default rulesType
